// 文件路径: dbms/execution/udf/ToUpperUdf.java
package com.dbms.execution.udf;

/**
 * 一个将字符串转换为大写的用户自定义函数 (UDF) 的示例实现。
 * 它实现了 Udf 接口，并提供了 `execute` 方法的具体逻辑。
 */
public class ToUpperUdf implements Udf {

    /**
     * 执行大小写转换的核心逻辑。
     * @param args 传入的参数列表。
     * @return 转换后的大写字符串。
     * @throws Exception 如果参数不合法（数量、类型错误等）。
     */
    @Override
    public Object execute(Object... args) throws Exception {
        // 1. 检查参数数量是否正确。UPPER 函数应该只接受一个参数。
        if (args.length != 1) {
            throw new IllegalArgumentException("UPPER function requires exactly one argument.");
        }

        // 2. 检查参数是否为 null。如果输入是 SQL NULL，则输出也应该是 SQL NULL。
        if (args[0] == null) {
            return null;
        }

        // 3. 检查参数类型是否为 String。如果传入非字符串类型，则应抛出异常。
        if (!(args[0] instanceof String)) {
            throw new IllegalArgumentException("Argument for UPPER function must be a string.");
        }

        // 4. 执行核心逻辑：调用 Java String 类的 toUpperCase() 方法，并返回结果。
        return ((String) args[0]).toUpperCase();
    }
}